﻿using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data.Common;
using System.Linq;
using System.Web;

namespace OsManager.Models.odbc
{
    public class ConnectionFactory
    {
        ///<summary>
        ///Recupera uma string de conexão, especificando o nome da conexão.
        ///Assume uma string de conexão por provedorno arquivo de configuração.
        ///</sumary>
        ///<param name="nomeConexao">Nome da conexão</param>
        ///<returns>Retorna a connection string</returns>
        public static ConnectionStringSettings GetConnectionStringByName(string nomeConexao)
        {
            ConnectionStringSettingsCollection settings = ConfigurationManager.ConnectionStrings;

            if (settings != null)
            {
                foreach (ConnectionStringSettings cs in settings)
                {
                    if (cs.Name == nomeConexao)
                    {
                        return cs;
                    }
                }
            }

            return null;
        }

        ///<summary>
        ///Dado um nome do provider e connection string, cria o DbProviderFactory e DbConnection.
        ///</sumary>
        ///<param name="nomeConexao">Nome da conexão</param>
        ///<returns>Retorna a DbConnection em caso de success; null no caso de falhas</returns>
        public static DbProviderFactory CreateDatabaseObject(string nomeConexao)
        {
            ConnectionStringSettings connectionString = GetConnectionStringByName(nomeConexao);
            DbProviderFactory factory = null;

            if (connectionString != null)
            {
                try
                {
                    factory = DbProviderFactories.GetFactory(connectionString.ProviderName);
                }
                catch
                {
                    if (factory != null)
                    {
                        factory = null;
                    }
                }
            }

            return null;
        }
    }
}